from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import include, path
from django.views import defaults as default_views
from django.views.generic import TemplateView
from drf_spectacular.views import SpectacularAPIView, SpectacularSwaggerView, SpectacularRedocView
from rest_framework_simplejwt import views as jwt
from rest_framework.documentation import include_docs_urls
from django.views.generic import RedirectView

def get_admin_redirect_url():
    if settings.DEBUG:
        return '/admin/'  # Development admin path
    else:
        return '/'+settings.ADMIN_URL  # Production admin path
    
urlpatterns = [
    # path("", TemplateView.as_view(template_name="pages/home.html"), name="home"),
    # path(
    #     "about/", TemplateView.as_view(template_name="pages/about.html"), name="about"
    # ),
    # # Django Admin, use {% url 'admin:index' %}
    path(settings.ADMIN_URL, admin.site.urls),
    path('', RedirectView.as_view(url=get_admin_redirect_url()), name="home"),
    # # User management
    # path("users/", include("tsl_backend.users.urls", namespace="users")),
    # path("accounts/", include("allauth.urls")),
    # Your stuff: custom urls includes go here
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

# API URLS
urlpatterns += [
    # API base url
    path("api/", include("config.api_router")),

    # DRF auth token
    # path("auth-token/", obtain_auth_token),

    # JWT auth token
    path("get-token/", jwt.TokenObtainPairView.as_view(), name="token_obtain_pair"),
    path("refresh-token/", jwt.TokenRefreshView.as_view(), name="token_refresh"),

    # path("api/schema/", SpectacularAPIView.as_view(), name="api-schema"),
    # path(
    #     "api/docs/",
    #     SpectacularSwaggerView.as_view(url_name="api-schema"),
    #     name="api-docs",
    # ),
    # path(
    #     "api/redoc/",
    #     SpectacularRedocView.as_view(url_name="api-schema"),
    #     name="api-redoc"
    # )
]

# GNS API
urlpatterns += [
    path("frontend/", include("tsl_backend.frontend_api.urls")),
    path("api/", include("tsl_backend.fgr_api.urls")),
]


if settings.DEBUG:
    # This allows the error pages to be debugged during development, just visit
    # these url in browser to see how these error pages look like.
    urlpatterns += [
        path(
            "400/",
            default_views.bad_request,
            kwargs={"exception": Exception("Bad Request!")},
        ),
        path(
            "403/",
            default_views.permission_denied,
            kwargs={"exception": Exception("Permission Denied")},
        ),
        path(
            "404/",
            default_views.page_not_found,
            kwargs={"exception": Exception("Page not Found")},
        ),
        path("500/", default_views.server_error),

        
        # path('docs/', include_docs_urls(title='My API title', public=False)),
        path("api/schema/", SpectacularAPIView.as_view(), name="api-schema"),
        path(
            "api/docs/",
            SpectacularSwaggerView.as_view(url_name="api-schema"),
            name="api-docs",
        ),
        path(
            "api/redoc/",
            SpectacularRedocView.as_view(url_name="api-schema"),
            name="api-redoc"
        ),


        path("", TemplateView.as_view(template_name="pages/home.html"), name="home"),
        path(
            "about/", TemplateView.as_view(template_name="pages/about.html"), name="about"
        ),
        # Django Admin, use {% url 'admin:index' %}
        # path(settings.ADMIN_URL, admin.site.urls),
        # User management
        # path("users/", include("tsl_backend.users.urls", namespace="users")),
        # path("accounts/", include("allauth.urls")),
    ]
    if "debug_toolbar" in settings.INSTALLED_APPS:
        import debug_toolbar

        urlpatterns = [path("__debug__/", include(debug_toolbar.urls))] + urlpatterns
